<?php
include_once 'bean.php';

abstract class Evento extends Bean {
    
	protected $id, $nome, $local, $data_inicio, $data_fim, $descricao, $tipo, $tabela, $quem_mexeu, $quando_mexeu;
	
	public function Animacao() {
	}

	public abstract function get_form();
	
	public abstract function get_musicas();
	
	public function get_id() {
		return $this->id;
	}
	
	public function set_id($id) {
		$this->id = $id;
	}
	
	public function get_nome() {
		return $this->nome;
	}
	public function set_nome($nome) {
		$this->nome = $nome;
	}
	
	public function get_local() {
		return $this->local;
	}
	public function set_local($local) {
		$this->local = $local;
	}
	
	public function get_data_inicio() {
		return $this->data_inicio;
	}
	
	public function get_data_inicio_formatada() {
		if (isset($this->data_inicio)) {
			return $this->data_inicio->format("d/m/Y");
		}
		else {
			return "";
		}
	}
	
	public function get_data_inicio_bd() {
		return $this->data_inicio->format("Y-m-d");
	}
	
	public function set_data_inicio($data_inicio_string) {
		$dia = mb_substr($data_inicio_string, 0, 2);
		$mes = mb_substr($data_inicio_string, 3, 2);
		$ano = mb_substr($data_inicio_string, 6, 4);
		
		$this->data_inicio = new DateTime();
		$this->data_inicio->setDate($ano, $mes, $dia);
	}
	
	public function get_data_fim() {
		return $this->data_fim;
	}
	
	public function get_data_fim_formatada() {
		if (isset($this->data_fim)) {
			return $this->data_fim->format("d/m/Y");
		}
		return "";
	}
	
	public function get_data_fim_bd() {
		if (isset($this->data_fim)) {
			return $this->data_fim->format("Y-m-d");
		}
		return "";
	}
	
	public function set_data_fim($data_fim_string) {
		if ($data_fim_string != "") {
			$dia = mb_substr($data_fim_string, 0, 2);
			$mes = mb_substr($data_fim_string, 3, 2);
			$ano = mb_substr($data_fim_string, 6, 4);
			
			$this->data_fim = new DateTime();
			$this->data_fim->setDate($ano, $mes, $dia);
		}
		else {
			$this->data_fim = null;
		}
	}
	
	public function get_descricao() {
		return $this->descricao;
	}
	public function set_descricao($descricao) {
		$this->descricao = $descricao;
	}
	
	public function get_tipo() {
		return $this->tipo;
	}
	public function set_tipo($tipo) {
		$this->tipo = $tipo;
	}
	
	public function get_tabela() {
		return $this->tabela;
	}
	public function set_tabela($tabela) {
		$this->tabela = $tabela;
	}
	
	public function get_quem_mexeu() {
		return $this->quem_mexeu;
	}
	public function set_quem_mexeu($quem_mexeu) {
		$this->quem_mexeu = $quem_mexeu;
	}
	
	public function get_quando_mexeu() {
		return date("d/m/Y \à\s H:i:s", $this->quando_mexeu);
	}
	
	public function get_data() {
		$inicio = $this->get_data_inicio_formatada();
		if (!isset($this->data_fim)) {
			return $inicio;
		}
		$fim = $this->get_data_fim_formatada();
		return "$inicio - $fim";
	}
	
	public function get_musicas_br_truncado($tamanho, $busca = "") {
		$string = "";
		$separador = "";
		foreach ($this->get_musicas() as $musica) {
			$string .= $separador."- ".$musica->get_titulo();
			$separador = "\n";
		}
		return nl2br(Truncador::truncar_ao_redor($string, $tamanho, $busca));
	}
	
	public function get_5_musicas($musica_id_busca = null, $janela = 5) {
		$musicas = $this->get_musicas();
		
		$musicas_retorno = array();
		
		if ($musica_id_busca != null) {
			for ($i = 0; $i < count($musicas); $i++) {
				if ($musicas[$i]->get_id() == $musica_id_busca) {
					$indice_musica = $i;
					break;
				}
			}
			
			$posicao_inicial = $indice_musica - (int) ($janela / 2);
			$resto = 0;
			if ($posicao_inicial < 0) {
				$resto = 0 - $posicao_inicial;
				$posicao_inicial = 0;
			}
			
			$posicao_final = $indice_musica + (int) ($janela / 2) + $resto;
			if ($posicao_final >= count($musicas)) {
				$resto = $posicao_final - (count($musicas) - 1);
				$posicao_final = count($musicas) - 1;
				$posicao_inicial -= $resto;
				if ($posicao_inicial < 0) {
					$posicao_inicial = 0;
				}
			}
			
			if ($posicao_inicial > 0) {
				$musicas_retorno[] = "(...)";	
			}
			
			$indice = $posicao_inicial;
			while ($indice <= $posicao_final) {
				$musicas_retorno[] = $musicas[$indice];
				$indice++;
			}
			
			if ($posicao_final < count($musicas) - 1) {
				$musicas_retorno[] = "(...)";
			}
		}
		else {
			for ($i = 0; $i < count($musicas); $i++) {
				if ($i == $janela) {
					$musicas_retorno[] = "(...)";
					break;
				}
				$musicas_retorno[] = $musicas[$i];
			}
		}
		return $musicas_retorno;
	}
	
}
?>